package org.layui.login.controller;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import org.layui.login.dao.UserDao;
import org.layui.login.dao.impl.UserDaoImpl;
import org.layui.login.entity.User;
import org.layui.login.util.Md5Util;
import org.layui.login.vo.ResponseData;

import java.io.IOException;
import java.io.PrintWriter;

/**
 * 实现登录逻辑
 * 第一：继承 HttpServlet
 * 第二：重写 doXxx 方法或 service 方法
 * 第三：在方法中实现业务功能
 * 第四：设置访问 URL
 *
 * @author ZQX
 * @date 2024-12-03
 */
@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        res.setCharacterEncoding("UTF-8");
        res.setContentType("application/json;charset=UTF-8");

        // 1.获取表单中输入的数据
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        // 2.验证数据的合法性 - 正则表达式（略）

        // 3.加工处理 - 业务实现
        // 3.1）实例化 DAO 对象
        UserDao userDao = new UserDaoImpl();

        // 3.2）调用 DAO 对象的方法，根据帐号查询用户
        User user = userDao.selectUserByName(username);

        ResponseData responseData = new ResponseData();

        if (user == null) {
            responseData.setCode(500001);
            responseData.setMsg("没有此帐号，请注册");
        } else if (Md5Util.equals(password,user.getPassword())) {
            responseData.setCode(200);
            responseData.setMsg("恭喜，登录成功！");
            responseData.setData(user);
            // 注意：在注册用户时，必须把明文的密码加密后再存储到数据表中
        } else {
            responseData.setCode(500002);
            responseData.setMsg("登录失败，错误的帐号或密码");
        }

        // 4.响应结果 - 先数据封装到 ResponseData,然后序列为 JSON 字符串，最后响应数据
        Gson gson = new GsonBuilder()
                .setDateFormat("yyyy-MM-dd hh:mm:ss")
                .create();
        String json = gson.toJson(responseData);

        PrintWriter out = res.getWriter();
        out.print(json);

        out.flush();
        out.close();
    }
}
